#include "ev.h"
#include "bmp.h"
#include "game.h"

void delay1(int ms){
	int i,j,k;
	while(ms--){
		for(i=0;i<1000;i++){
			for(j=0;j<100;j++){
				k++;
			}
		}
	}
}

int flag= 0;
//Game_buf二维数组用来表示这个棋盘(12行，20列)
unsigned int Game_buf[12][20] = {0};

//接受点击处坐标
int Game_Change(int x,int y)
{
	//找离点击处最近的点
	int i,j;
	//看更接近哪个点
	i = x % 40;
	j = y % 40;
	if(i > 20)
	{
		//更远的那个
		i = x / 40 + 1;
	}
	else
	{
		//更近的那个
		i = x / 40;
	}
	if(j > 20)
	{
		//更远的那个
		j = y / 40 + 1;
	}
	else 
	{
		//更近的那个
		j = y / 40;
	}	
	x = i * 40;   //40的整数倍 确保在黑线上
	y = j * 40;   //40的整数倍
	//如果此时棋盘上没有棋子
	if(Game_buf[j][i]==0)
	{
		//如果游戏已经开始
		if(flag)
		{
			//放棋子
			Game_buf[j][i]=1;	
			Dis_zi(y,x,flag);  //y,x,1
			
		}
		else
		{
			Game_buf[j][i]=2;
			Dis_zi(y,x,flag);  //y,x,0
		}	
		flag = ~flag;  //按位取反 0->1  1->0				  
	}
 
 
}

//初始化棋盘
int clear()
{
	for(int a=0;a<12;a++)
	{
		for(int b = 0;b < 20;b++)
		{
			Game_buf[a][b]=0;
 
		}
	}
}

//(x,y)处表示棋子落子处,flag表示棋子颜色变化指标
int Dis_zi(int x,int y,int flag)
{
	int i,j;
	//游戏开始--先0后1(先黑后白)
	//画黑棋子
	if(flag)
	{
		for(i=0;i<480;i++)
		{
			for(j=0;j<800;j++)
			{
				//以(x,y)为圆心,半径为根号330画圆
				if((i-x)*(i-x)+(j-y)*(j-y)<=330)
				{
					//像素点涂黑
					Display(0x00,j,i);
				}
			}
		}
	}
	//画白棋子
	else
	{
		for(i=0;i<480;i++)
		{
			for(j=0;j<800;j++)
			{
				//以(x,y)为圆心,半径为根号330画圆
				if((i-x)*(i-x)+(j-y)*(j-y)<=330)
				{
					//像素点涂白
					Display(0x00ffffff,j,i);
				}
			}
		}
	}
}


// 判断游戏是否结束
int Game_Over()
{
    int a, b;  //定义行，列
    for (a = 0; a < 12; a++)  // 遍历棋盘行
    {
        for (b = 0; b < 20; b++)  // 遍历棋盘列
        {
            if (Game_buf[a][b] != 0)  // 如果有棋子
            {
                int h = 1;
                while (h < 5 && a + h < 12 && Game_buf[a][b] == Game_buf[a + h][b])  // 判断下
                    h++;
                if (h == 5)
                {
                    Dis_pic("picture2/win.bmp");
                    clear();
                    return 1;
                }

                int s = 1;
                while (s < 5 && b + s < 20 && Game_buf[a][b] == Game_buf[a][b + s])  // 判断右
                    s++;
                if (s == 5)
                {
                    Dis_pic("picture2/win.bmp");
                    clear();
                    return 1;
                }

                int x = 1;
                while (x < 5 && a + x < 12 && b + x < 20 && Game_buf[a][b] == Game_buf[a + x][b + x])  // 判断右下
                    x++;
                if (x == 5)
                {
                    Dis_pic("picture2/win.bmp");
                    clear();
                    return 1;
                }

                int j = 1;
                while (j < 5 && a + j < 12 && b - j >= 0 && Game_buf[a][b] == Game_buf[a + j][b - j])  // 判断左下
                    j++; 
                if (j == 5)
                {
                    Dis_pic("picture2/win.bmp");
                    clear();
                    return 1;
                }
            }
        }
    }
    return 0;
}